/* 
 * interface.js
 * 
 * Gestion des événements dans le générateur de jmemor
 * (c) 2012 - Patrick Cardona
 * jmemor version : 1.3.0
 * 
 * @source: http://code.google.com/p/jmemor/
 * 
 */ 

/* =================================================================== */
/* LICENCE
/* =================================================================== */
/*
@licstart  The following is the entire license notice for the 
    JavaScript code in this page.

Copyright (C) 2012  Patrick CARDONA

    The JavaScript code in this page is free software: you can
    redistribute it and/or modify it under the terms of the GNU
    General Public License (GNU GPL) as published by the Free Software
    Foundation, either version 3 of the License, or (at your option)
    any later version.  The code is distributed WITHOUT ANY WARRANTY;
    without even the implied warranty of MERCHANTABILITY or FITNESS
    FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.

    As additional permission under GNU GPL version 3 section 7, you
    may distribute non-source (e.g., minimized or compacted) forms of
    that code without the copy of the GNU GPL normally required by
    section 4, provided you include this license notice and a URL
    through which recipients can access the Corresponding Source.
    
@licend  The above is the entire license notice
    for the JavaScript code in this page.    
*/

// Initialisation  des données de la Barre de progression :

var pct=0;
var valmax=0;
var handle =0;
var navigateur = null;

/*
 *  Initialisation  des données des menus
 */

var timeout    = 500;
var closetimer = 0;
var ddmenuitem = 0;

/*
 * Gestion barre de progression
 */
function update(){
        pct = pct + 4;
        $("#barre").reportprogress(pct);
        if(pct == 100){
        	clearInterval(handle);
        	pct=0;
        	$("#enregistrement").show();
        	$("#label_barre").hide();
        	$("#bloc_barre").hide();
        }

}

/*
 * Variables globales
 *
 * On crée des instances de l'objet jmemor et de l'objet carte
*/
var jmemor = new ojmemor();
var carte = new ocarte();



/* ****************************************************************** */
/* Interface utilisateur au moyen de gestionnaires d'événements JQuery */
/* ****************************************************************** */

$(document).ready(function(){


/*
 * Gérer les icônes d'action d'un tableau affichant une série de carte
 */
function actionsTableauCartes(){
	$("td.editer_carte").bind({
						"click": function(){
						// On récupère l'index
						var cle = $(this).parent().attr("id");
		  				var x = parseInt(cle.charAt(6));
		  				
		  				// On édite la carte de la série
		  				carte.editeCarte(x);
		  				// On actualise le tableau
		  				carte.tableau();
		  				actionsTableauCartes(); // Appel récursif
		  			},
		  					
						"mouseover": function(){
		  					$(this).css("cursor","pointer");
		  			},
		  		
		  				"mouseout": function(){
		  					$(this).css("cursor","default");
		  			}
					});
					
					$("td.supprimer_carte").bind({
						"click": function(){
						// On récupère l'index
						var cle = $(this).parent().attr("id");
		  				var x = parseInt(cle.charAt(6));
		  				
		  				// On efface la carte de la série
		  				carte.supprimeCarte(x);
		  				// On actualise le tableau
		  				carte.tableau();
		  				actionsTableauCartes(); // Appel récursif
		  				
					},
							
						"mouseover": function(){
		  					$(this).css("cursor","pointer");
		  					$(this).addClass("rouge");
		  					
		  			},
		  		
		  				"mouseout": function(){
		  					$(this).css("cursor","default");
		  					$(this).removeClass("rouge");
		  			}
					
					});
}

function actionsTableauSeriesStockees(){
	$("#jmemors tr td:nth-child(2)").bind({
  		"click": function(){
  			// Détail...
  			$(".clique").removeClass("clique");
  			$(this).addClass("clique");
  			var cle = $(this).parent().attr("id");
  			
  			
  			aide.contenu = lireFichier(cle);
  			aide.titre = "Détail de la série enregistrée";
  			aide.affiche();
  			
  		},
  		
  		"mouseover": function(){
  			$(this).css("cursor","pointer");
  		},
  		
  		"mouseout": function(){
  			$(this).css("cursor","default");
  		}
  	});
  	
  	$("#jmemors tr td:nth-child(3)").bind({
  		"click": function(){
  			// Ménage...
  			
			$("#cartes_saisies").html("<p>...</p>");
  			// Ouvrir...
  			var cle = $(this).parent().attr("id");
  			carte.propagerLesDonnees(cle);
  			carte.tableau();
  			actionsTableauCartes();
  		},
  		
  		"mouseover": function(){
  			$(this).css("cursor","pointer");
  		},
  		
  		"mouseout": function(){
  			$(this).css("cursor","default");
  		}
  	});
  	
  	$("#jmemors tr td:nth-child(4)").bind({
  		
  		"mouseover": function(){
  			$(this).addClass("rouge");
  		},
  		"mouseout": function(){
  			$(this).removeClass("rouge");
  		},
  		"click": function(){
  			// Suppression...
  			var cle = $(this).parent().attr("id");
  			$(".clique").removeClass("clique");
  			$("#contenu_fichier").html("Suppression...")
  			$(this).addClass("rouge");
  			supprimeFichier(cle);
  			actionsTableauSeriesStockees(carte);
  			
  		}
  		
  		});
}

/*
 * On affiche la zone de menu :
 */
$("#menu").show();

$('#MenuDeroulant > li').bind('mouseover', MenuDeroulant_open);
$('#MenuDeroulant > li').bind('mouseout',  MenuDeroulant_timer);
$('document').click(function(){
	MenuDeroulant_close();
});
		
/*
 * On charge les zones de l'interface :
 */
 
 /*
 * Remarque importante :
 * L'affichage du bloc exerciseur et du téléchargement du code sont consécutifs à la fin 
 * de l'affichage de la barre de progression : cf. la fonction update() en début de fichier.
 */
 	
// D'abord Edition, puis création
$("#monAction").html(action_Modifier());
$("#monAction").append(action_Importer());
$("#monAction").append(action_Nouveau());
 
// Autres étapes emplilées : A ADAPTER !!!
$("#FinAction").html(action_Saisie_Serie());
$("#FinAction").append(action_Code());
$("#FinAction").append(action_Copie_Exerciseur_jmemor());
	
/*
 * Affichage de l'aide
 */
	function Aide(){
		this.titre = "";
		this.contenu = "";
	}
	
	Aide.prototype.affiche = function(){
		$("#titre_aide").text(this.titre);
		$("#contenu_aide").html(this.contenu);
		$("#contenu_aide").append(pied_bis());
		$("#zone_aide").show();
	}
	
	var aide = new Aide();
	
/* ************************************
 * 
 * Actions déclenchées par les menus
 * 
 **************************************/
	/*
	 * Lien : présentation
	 */
	$("a[title='Présentation']").click(function(e){
		/*
		 * On affiche le logo majeur
		 */
		// On masque les zones non sollicitées
		$("#chemin_fichier").hide();
		$("*[id*=etape]").each(function(){
			$(this).hide();
		});
		
		$("#logo").animate(
					{
					width:501,
					heigth: 200,
					top:0,
					opacity:100},{
						duration: 1500,
    					easing: 'linear',
    					complete: function(){
    						
				    			
				    			$("#copy").show();
				    			/*
				    			 * On vide les champs
				    			 */
				    			$("*[id*=edito_]").each(function(){
									$(this).val("");
								});
				    		
						}
					});
		

		aide.titre = "Présentation";
		aide.contenu = contenu_Presentation();
		aide.affiche();
		e.preventDefault(); // Pour ne pas suivre le lien.
	});
	
	
	
	/*
	 * Lien : Exerciseur
	 */
	
	$("a[title='Exerciseur de jmemor']").click(function(e){
		
		$("#logo").animate(
					{
					width:0,
					heigth: 0,
					top:0,
					opacity:0},{
						duration: 1500,
    					easing: 'linear',
    					complete: function(){
    						
				    			$("#chemin_fichier").hide();
				    			$("*[id*=etape]").each(function(){
									$(this).hide();
								});
				    			$("footer").show();
				    			$("#copy").hide();
				    			$("#etape_Action_Copie_Exerciseur_jmemor").show();
				    			
				    		
						}
					});
		aide.titre = "Exerciseur de jmemor";
		aide.contenu = contenu_Exerciseur_jmemor();
		aide.affiche();
		e.preventDefault(); // Pour ne pas suivre le lien.
	});
		
	/*
	 * Lien : Principe
	 */
	
	$("a[title='Principe']").click(function(e){
		aide.titre = "Principe";		
		aide.contenu = contenu_Principe();	  
		aide.affiche();
		e.preventDefault(); // Pour ne pas suivre le lien.
	});

	
	
	/*
	 * Lien : Pas à pas
	 */
	$("a[title='Pas à pas : jmemor']").click(function(e){
		aide.titre = "Pas à pas : jmemor";
		aide.contenu = contenu_Pas_A_Pas_jmemor();
		aide.affiche();
		e.preventDefault(); // Pour ne pas suivre le lien.
	});
	
	/*
	 * Lien licence
	 */
	$("a[title='Licence']").click(function(e){
		$.Zebra_Dialog(lic, {
    'title':    'Licence',
    'width': '600'
	});
		
		e.preventDefault();
	});
	
	/*
	 * Lien Contact :
	 */
	$("a[title='Contact']").click(function(e){
		$.Zebra_Dialog("pcardona34@gmail.com", {
    'title':    'Contact'
	});
		
		e.preventDefault();
	});
		
	/*
	 * Lien Créer une série de cartes
	 */
	$("a[title='Nouveau']").click(function(e){
		
		/*
		 * On réinitialise les objets jmemor et carte
		 */
		
		jmemor.version = obtientDate();
		jmemor.theme = "";
		jmemor.auteur = "";
		jmemor.series = [];
		
		/*
		 * Idem pour l'objet carte
		 */
		carte.paire = [];
		carte.serie = [];
		
		$("#cartes_saisies").html("<p>...</p>");
		$("#logo").animate(
					{
					width:0,
					heigth: 0,
					top:0,
					opacity:0},{
						duration: 1500,
    					easing: 'linear',
    					complete: function(){
    						
				    			$("*[id*=etape]").each(function(){
				    				$(this).hide();
				    			});
				    			$("#etape_Action_Nouveau").show();	
				    			$("footer").show();
				    			$("#copy").hide();
				    			/*
				    			 * On vide les champs
				    			 */
				    			$("*[id*=edito_jmemor]").each(function(){
									$(this).val("");
								});
								/*
								 * Idem pour le tableau provisoire de la série...
								 */
								
				    		
						}
					});
		aide.titre = "Pas à pas : jmemor";
		aide.contenu = contenu_Pas_A_Pas_jmemor();
		aide.affiche();
		// On vide le code stocké :
		jmemor.code = "";
		e.preventDefault();
	});
	
	
	
	/*
	 * Modifier un exercice
	 */
	$("a[title='Modifier']").click(function(e){
		/*
		 * On réinitialise l'objet jmemor
		 */
		
		jmemor.version = obtientDate();
		jmemor.series = [];
		
		/*
		 * Idem pour l'objet carte
		 */
		carte.paire = [];
		carte.serie = [];
		
		// Animation du logo et chargement de l'interface
		$("#logo").animate(
					{
					width:0,
					heigth: 0,
					top:0,
					opacity:0},{
						duration: 1500,
    					easing: 'linear',
    					complete: function(){
    						
				    			$("*[id*=etape]").each(function(){
				    				$(this).hide();
				    			});
				    			$("#etape_Action_Modifier").show();
				    			$("#chemin_fichier").show();
				    			$("footer").show();
				    			$("#copy").hide();
				    			$("#contenu_fichier").hide();
				    			$("#charger_contenu").hide();
				    			
				    			carte.listerJSON();
				    			actionsTableauSeriesStockees();	
				    		
						}
					});
		aide.titre = "Modifier un exercice";
		aide.contenu = contenu_Modifier();
		aide.affiche();
		// On vide le code stocké :
		jmemor.code = "";
		jmemor.version = obtientDate();
		
		e.preventDefault();
	});
	
	/*
	 *  Importer un exercice
	 */
	 
	 $("a[title='Importer']").click(function(e){
		/*
		 * On réinitialise l'objet jmemor
		 */
		
		jmemor.version = obtientDate();
		jmemor.series = [];
		
		/*
		 * Idem pour l'objet carte
		 */
		carte.paire = [];
		carte.serie = [];
		
		// Animation du logo et chargement de l'interface
		$("#logo").animate(
					{
					width:0,
					heigth: 0,
					top:0,
					opacity:0},{
						duration: 1500,
    					easing: 'linear',
    					complete: function(){
    						
				    			$("*[id*=etape]").each(function(){
				    				$(this).hide();
				    			});
				    			/* On nettoie la zone d'importation */
				    			$("#zone_importation").val("");
				    			$("#etape_Action_Importer").show();
				    			$("footer").show();
				    			$("#copy").hide();	
				    		
						}
					});
		aide.titre = "Importer un exercice";
		aide.contenu = contenu_Importer();
		aide.affiche();
		// On vide le code stocké :
		jmemor.code = "";
		jmemor.version = obtientDate();
		
		e.preventDefault();
	});
	
	// On affiche la présentation par défaut :
	$("a[title=Présentation]").click();

/*
 * Suite de l'initialisation de l'interface
 */

// On initialise et on masque la Barre de progression
$("#barre").reportprogress(0);

/* **************************************************************
 * 
 * Gestionnaire d'événement : quand on clique sur un bouton…
 * 
 *************************************************************** */



$("input:submit").click(function(e){
	
	// On applique le style Bouton enfoncé...
	$(this).addClass("mousedown"),$(this).mouseout(function(){
		$(this).removeClass("mousedown");
	});
	// Quel label sur le bouton ?
	var label_bouton = $(this).val();
	switch(label_bouton){
		
		case "Enregistrer les paramètres":
			var bonneSaisie = true;
				// Les données saisies sont-elles valides ?
				$("*[id*=edito_jmemor]").each(function(){
					if ( $(this).val().length == 0 ){ // Si une saisie est vide !
							var msg = "Le champ " + $(this).attr("name") + " est vide !";
							bonneSaisie = false;
							
							$.Zebra_Dialog(msg, {
								'type': 'error',
								'title':    'Erreur de saisie'
							});
							
							return false;
					}
				}); // fin vérif saisie données édito

				if ( bonneSaisie == true ){ // La saisie est correcte
					
					// On stocke les données éditoriales
					
					jmemor.theme = $("#edito_jmemor_0").val();
					jmemor.auteur = $("#edito_jmemor_1").val();
				
					// On affiche l'étape suivante
					
					$("#etape_Action_Saisie_Serie").show();
					$("#etape_Action_Nouveau").hide();
				}
		break;
		
				
		case "Enregistrer cet exercice":
			
			
			if(carte.serie.length == 0){
				$.Zebra_Dialog('Aucune carte saisie.', {
					'type': 'error',
					'title':    'Erreur'
					
				});
				
				break;
			}
			
			// On génère et on stocke le code JSON des données de l'exercice
			$("#bloc_barre").show();
			handle = setInterval("update()",25);
			if(jmemor.code != undefined){
				delete jmemor.code;
				delete jmemor.fic_code;
			}
			jmemor.genereCode(carte.serie);
			
			$("#zonecode").val(jmemor.code);
			
			$("*[div*=etape]").each(function(){
				$(this).hide();
			});
			$("#etape_Action_Code").show();
			$("#etape_Action_Saisie_Serie").hide();
			
			carte.serie = new Array();
			$("#cartes_saisies").html("<p>...</p>");
			/*
			 * Remarque importante :
			 * L'affichage du bloc exerciseur et du téléchargement du code sont consécutifs à la fin 
			 * de l'affichage de la barre de progression : cf. la fonction update() en début de fichier.
			 */
		break;
		
		case "Télécharger un exerciseur de jmemor...":
			
    			window.location.href = "http://exercice-jmemor.googlecode.com/files/exercice-jmemor-210.zip";
			
		break;
		
		case "Sélectionner le code":
			
    		$("#zonecode").select();
    		aide.titre = "Et maintenant... ?";
    		aide.contenu = contenu_Code();
    		aide.affiche();
			
		break;
		
		
		case "Ajouter cette carte":
				var bonneSaisie = true;
				// Les données saisies sont-elles valides ?
				$("*[id*=carte_]").each(function(){
					if ( $(this).val().length == 0 ){ // Si une saisie est vide !
						var msg = "Le champ " + $(this).attr("name") + " est vide !";
						bonneSaisie = false;
						$.Zebra_Dialog(msg, {
							'type': 'error',
							'title':    'Erreur de saisie'
						});
						
						return false;
					}
				}); // fin vérif saisie des mots et indices

				if ( bonneSaisie == true ){ // La saisie est correcte
					
					carte.paire = [];
					// On stocke la carte (recto + verso) :
					
					carte.paire = [ $("#carte_1").val(), $("#carte_2").val() ];
					carte.serie.push( carte.paire );
					
					// On actualise le tableau des cartes saisies :
					carte.tableau();
					// ON applique les actions possibles aux cartes saisies
					actionsTableauCartes();
					
					// On alterne la couleur pour les lignes paires :
					$(".carte tr:nth-child(even)").addClass("gris");
					// On vide le formulaire pour la saisie suivante :
					$("*[id*=carte_]").each(function(){
						$(this).val("");
					}); // fin effacement
					
					// On rend le tableau visible :
					$("#cartes_saisies").show(); 
					
				} // Fin if bonne saisie
			break;
				
		case "Importer ce code":
				var code = $("#zone_importation").val();
				carte.Importer(code);
				/* On applique sur ce tableau les actions possibles sur les cartes saisies */
				actionsTableauCartes();
				
		break;
			
			
		default:
				$.Zebra_Dialog("Aucune action définie pour ce bouton !", {
					'type': 'error',
					'title':    'Erreur dans la gestion de l\'interface'
				});
		
	}
	
	e.preventDefault(); // Empêche de suivre le lien ou de recharger la page
}); /* Fin gestionnaire de click sur un bouton */

/*
 * Gestion du lien 'à propos' dans l'interface
 */
$("a[title=apropos]").click(function(e){
		apropos.affiche();
		e.preventDefault(); // Pour ne pas suivre le lien.
	});

	
}); // Fin de la fonction .ready
					
					
						
